Computer programs and applications commonly make use of a plugin style architecture in which a base computer program relies on other software components, known alternatively as plugins, add-ins, add-ons or extensions, that can add specific features to the base computer program. Examples of plug-ins are the storage engine Application Program Interfaces (APIs) underneath Relational Database Services (RDS) such as MySQL. Such APIs are typically exposed as function pointer tables in shared libraries. Another example of a plugin architecture is the controller code that runs on a base station unit (BU) in a Cloud-Radio Access Network (Cloud-RAN).
In the plugin environment, several co-existing program threads can be accessing the same plugin components, which can introduce challenges when updating plugin components. Dynamic Software Update (DSU) procedures have been developed to allow code and data updates such as critical security patches to be applied to a software component such as a plugin without downtime. For example, Ksplice (Ksplice: Automatic Rebootless Kernel Updates; Jeff Arnold and M. Frans Kaashoek; Massachusetts Institute of Technology; https://pdos.csail.mit.edu/papers/ksplice:eurosys.pdf) describes a DSU procedure for applying patches into the Linux kernel. Another example is the Kitsune system (Kitsune: Efficient, General-purpose Dynamic Software Updating for C; Christopher M. Hayden, Edward K. Smith, Michail Denchev, Michael Hicks, Jeffrey S. Foster; University of Maryland, College Park, USA; https://www.cs.umd.edu/˜tedks/papers/2012-oopsla-kitsune.pdf). Both of these procedures require quiescing the system in some way before the update can be performed. In the present disclosure, DSU procedures that require the system to be quiesced before a dynamic update can be applied are referred to as “synchronous” DSU procedures. Synchronous DSU ensures that an update in the system state will be observed by all threads consistently. However, Synchronous DSU can be disadvantageous in some systems because the overhead of quiescing the system can increase as the number of active threads increases.
Accordingly, there is a need for a DSU procedure and system in which software updates can be applied to a software component that does not require quiescing the system.